package com.tos.second.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.tos.second.common.Result.PageResult;
import com.tos.second.common.basecontext.BaseContext;
import com.tos.second.common.constant.MessageConstant;
import com.tos.second.common.exception.BaseException;
import com.tos.second.common.exception.UserNotFoundException;
import com.tos.second.dto.AdminUserEditDto;
import com.tos.second.dto.UserAddDto;
import com.tos.second.dto.UserEditDto;
import com.tos.second.dto.UserPageQueryDTO;
import com.tos.second.entity.User;
import com.tos.second.mapper.AdminMapper;
import com.tos.second.mapper.UserMapper;
import com.tos.second.service.AdminService;
import com.tos.second.service.UserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

@Service
public class AdminServiceImpl extends ServiceImpl<AdminMapper, User> implements AdminService{

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private AdminMapper adminMapper;

    @Autowired
    private UserMapper userMapper;
    /**
     * 用户获取信息接口
     *
     * @return
     */
    @Override
    public User getMsg() {
        //获取当前登录用户的id
        Long currentId = BaseContext.getCurrentId();
        //根据id查询数据库
        return adminMapper.getById(currentId);
    }//huo

    /**
     * 用户分页查询接口
     *
     * @param userPageQueryDTO
     * @return
     */
    @Override
    public PageResult pageQuery(UserPageQueryDTO userPageQueryDTO) {
        //每页固定为10个
        int pageSize = 10;
        PageHelper.startPage(userPageQueryDTO.getPage(), pageSize);
        Page<User> page = adminMapper.pageQuery(userPageQueryDTO);

        return new PageResult(page.getTotal(), page.getResult());
    }

    /**
     * 用户状态修改接口
     *
     * @param id
     * @param status
     * @return
     */
    @Override
    public void setStatus(Long id, Integer status) {
        //根据id查询数据库的用户
        User user = adminMapper.getById(id);
//        User user = getById(id);
        //判断用户是否为空
        if(user == null){
            throw new UserNotFoundException(MessageConstant.USER_NOT_FOUND);
        }
        //如果不为空，修改状态
        user.setStatus(status);
        //更新时间和更新用户自动填充
        userMapper.updateUser(user);
//        updateById(user);
    }

    /**
     * 用户新增接口
     *
     * @param userAddDto
     */
    @Override
    public void saveUser(UserAddDto userAddDto) {
        User user = new User();
        //复制属性
        BeanUtils.copyProperties(userAddDto, user);

        //其他字段创建更新自动填充
        //查询redis中的验证码
        String checkCode = (String) redisTemplate.opsForValue().get(user.getEmail());
        //获得传过来的验证码
        String code = userAddDto.getCode();
        //进行不区分大小写的比对
        if (checkCode != null && checkCode.equalsIgnoreCase(code)) {
            //检验成功，进行下一步
            //对密码进行md5加密处理
            user.setPassword(DigestUtils.md5DigestAsHex(userAddDto.getPassword().getBytes()));
            //设置新增管理员身份
            user.setIdentity("admin");
            //删除redis中的验证码
            redisTemplate.delete(user.getEmail());
            //进行插入新增操作
            userMapper.saveUser(user);
//            save(user);
        }
        //如果比对失败，则提示
        throw new BaseException(MessageConstant.CODE_ERROR);
    }

    /**
     * 用户修改接口
     * @param editDto
     */
    @Override
    public void updateUser(AdminUserEditDto editDto) {
        //查询数据库id为user.id的用户
        Long editDtoId = editDto.getId();
        User user = adminMapper.getById(editDtoId);

        //判断用户是否为空
        if (user == null){
            throw new UserNotFoundException(MessageConstant.USER_NOT_FOUND);
        }
        //不为空则将传过来的属性值复制
        BeanUtils.copyProperties(editDto, user);
        //进行更新操作
//        updateById(user);
        userMapper.updateUser(user);
    }

}
